﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Wydatki.WRK.Praca.DataSets;
using ProgNetComponents.Data.SqlCe;
using System.Data;
using ProgNetComponents.Classes;
using ProgNetComponentsDx.Forms;
using Wydatki.Setup.Praca.DataSets;

namespace Wydatki.WRK.Praca
{
    public static class SetupIpmortTools
    {
        private static SqlCeDataManager  manager = new SqlCeDataManager();

        #region KPiR
        public static void AddKpirFromDef(WrkKpirDataSet ds, int id, DataRow row)
        {
            if (row != null)
            {
                DataRow[] child = row.GetChildRows(row.Table.ChildRelations[0]);
                foreach (DataRow r in child)
                    r.Delete();
            }
            else
            {
                row = ds.WRK_KPIR.NewRow();
                ds.WRK_KPIR.Rows.Add(row);
            }

            DataTable dt = new DataTable("STP_KPIR");
            manager.FillTable(dt, "SELECT * FROM STP_KPIR WHERE STP_KPIR_ID = @ID", new NamedObject("@ID", id));
            if (dt.Rows.Count == 1)
            {
                DataRow setupFaktura = dt.Rows[0];
                row["WRK_KPIR_KONTRACHENT"] = setupFaktura["STP_KPIR_KONTRACHENT"];
                row["WRK_KPIR_UWAGI"] = setupFaktura["STP_KPIR_UWAGI"];
                row["WRK_KPIR_OPIS"] = setupFaktura["STP_KPIR_OPIS"];
                row["DODAJ_DO_WYDATKOW"] = setupFaktura["STP_KPIR_DODAJ_DO_WYDATKOW"];

                dt = new DataTable("STP_KPIR_KWOTY");
                manager.FillTable(dt, "SELECT * FROM STP_KPIR_KWOTY WHERE STP_KPIRK_FAKTURA = @ID", new NamedObject("@ID", id));
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow setupKwotaRow in dt.Rows)
                    {
                        DataRow newKwota = ds.WRK_KPIR_KWOTY.NewRow();
                        newKwota["WRK_KPIRK_FAKTURA"] = row["WRK_KPIR_ID"];
                        newKwota["WRK_KPIRK_KWOTA_NETTO"] = setupKwotaRow["STP_KPIRK_KWOTA_NETTO"];
                        newKwota["WRK_KPIRK_TYP"] = setupKwotaRow["STP_KPIRK_TYP"];
                        ds.WRK_KPIR_KWOTY.Rows.Add(newKwota);
                    }
                }
            }
        }

        public static void SaveKpirAsDef(DataRow row)
        {
            if (row.CanRead())
            {
                InputForm f = new InputForm();
                string name = f.ShowInputDialog("Nazwa", "Nowa definicja KPiR");
                if (name.IsNotNull())
                {
                    StpKpirDataSet ds = new StpKpirDataSet();
                    manager.AddTableDef(ds.STP_KPIR);
                    manager.AddTableDef(ds.STP_KPIR_KWOTY);
                    DataRow newSetupFaktura = ds.STP_KPIR.NewRow();
                    newSetupFaktura["STP_KPIR_NAZWA"] = name;
                    newSetupFaktura["STP_KPIR_KONTRACHENT"] = row["WRK_KPIR_KONTRACHENT"];
                    newSetupFaktura["STP_KPIR_UWAGI"] = row["WRK_KPIR_UWAGI"];
                    newSetupFaktura["STP_KPIR_OPIS"] = row["WRK_KPIR_OPIS"];
                    newSetupFaktura["STP_KPIR_DODAJ_DO_WYDATKOW"] = row["DODAJ_DO_WYDATKOW"].AsBool();
                    ds.STP_KPIR.Rows.Add(newSetupFaktura);

                    DataRow[] child = row.GetChildRows(row.Table.ChildRelations[0]);
                    DataRow newKwota = null;
                    foreach (DataRow kw in child)
                    {
                        newKwota = ds.STP_KPIR_KWOTY.NewRow();
                        newKwota["STP_KPIRK_FAKTURA"] = newSetupFaktura["STP_KPIR_ID"];
                        newKwota["STP_KPIRK_KWOTA_NETTO"] = kw["WRK_KPIRK_KWOTA_NETTO"];
                        newKwota["STP_KPIRK_TYP"] = kw["WRK_KPIRK_TYP"];
                        ds.STP_KPIR_KWOTY.Rows.Add(newKwota);
                    }
                    if (manager.UpdateDataSet(ds))
                        f.ShowDxInfoDialog("Nowa definicja dodana pomyślnie.");
                    else
                    {
                        manager.LastException.Log();
                        f.ShowDxErrorDialog("Błąd dodawania definicji.");
                    }
                    f.Dispose();
                }
            }
        }
        #endregion

        #region VAT S
        public static void AddVatsFromDef(WrkVatsDataSet ds, int id, DataRow row)
        {
            if (row != null)
            {
                DataRow[] child = row.GetChildRows(row.Table.ChildRelations[0]);
                foreach (DataRow r in child)
                    r.Delete();
            }
            else
            {
                row = ds.WRK_VATS.NewRow();
                ds.WRK_VATS.Rows.Add(row);
            }

            DataTable dt = new DataTable("STP_VATS");
            manager.FillTable(dt, "SELECT * FROM STP_VATS WHERE STP_VATS_ID = @ID", new NamedObject("@ID", id));
            if (dt.Rows.Count == 1)
            {
                DataRow setupFaktura = dt.Rows[0];
                row["WRK_VATS_NABYWCA"] = setupFaktura["STP_VATS_NABYWCA"];
                row["WRK_VATS_UWAGI"] = setupFaktura["STP_VATS_UWAGI"];
                row["WRK_VATS_OPIS"] = setupFaktura["STP_VATS_OPIS"];
                row["DODAJ_DO_KPIR"] = setupFaktura["STP_VATS_DODAJ_DO_KPIR"];
                dt = new DataTable("STP_VATS_KWOTY");
                manager.FillTable(dt, "SELECT * FROM STP_VATS_KWOTY WHERE STP_VATSK_FAKTURA = @ID", new NamedObject("@ID", id));
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow setupKwotaRow in dt.Rows)
                    {
                        DataRow newKwota = ds.WRK_VATS_KWOTY.NewRow();
                        newKwota["WRK_VATSK_FAKTURA"] = row["WRK_VATS_ID"];
                        newKwota["WRK_VATSK_KWOTA_NETTO"] = setupKwotaRow["STP_VATSK_KWOTA_NETTO"];
                        newKwota["WRK_VATSK_TYP"] = setupKwotaRow["STP_VATSK_TYP"];
                        newKwota["WRK_VATSK_TYP_KPIR"] = setupKwotaRow["STP_VATSK_TYP_KPIR"];
                        newKwota["WRK_VATSK_NAZWA"] = setupKwotaRow["STP_VATSK_NAZWA"];
                        newKwota["WRK_VATSK_ILOSC"] = setupKwotaRow["STP_VATSK_ILOSC"];
                        ds.WRK_VATS_KWOTY.Rows.Add(newKwota);
                    }
                }
            }
        }

        public static void SaveVatsAsDef(DataRow row)
        {
            if (row.CanRead())
            {
                InputForm f = new InputForm();
                string name = f.ShowInputDialog("Nazwa", "Nowa definicja Sprzedaży VAT");
                if (name.IsNotNull())
                {
                    StpVatsDataSet ds = new StpVatsDataSet();
                    manager.AddTableDef(ds.STP_VATS);
                    manager.AddTableDef(ds.STP_VATS_KWOTY);
                    DataRow newSetupFaktura = ds.STP_VATS.NewRow();
                    newSetupFaktura["STP_VATS_NAZWA"] = name;
                    newSetupFaktura["STP_VATS_NABYWCA"] = row["WRK_VATS_NABYWCA"];
                    newSetupFaktura["STP_VATS_UWAGI"] = row["WRK_VATS_UWAGI"];
                    newSetupFaktura["STP_VATS_OPIS"] = row["WRK_VATS_OPIS"];
                    newSetupFaktura["STP_VATS_DODAJ_DO_KPIR"] = true;
                    ds.STP_VATS.Rows.Add(newSetupFaktura);

                    DataRow[] child = row.GetChildRows(row.Table.ChildRelations[0]);
                    DataRow newKwota = null;
                    foreach (DataRow kw in child)
                    {
                        newKwota = ds.STP_VATS_KWOTY.NewRow();
                        newKwota["STP_VATSK_FAKTURA"] = newSetupFaktura["STP_VATS_ID"];
                        newKwota["STP_VATSK_KWOTA_NETTO"] = kw["WRK_VATSK_KWOTA_NETTO"];
                        newKwota["STP_VATSK_TYP"] = kw["WRK_VATSK_TYP"];
                        newKwota["STP_VATSK_TYP_KPIR"] = kw["WRK_VATSK_TYP_KPIR"];
                        newKwota["STP_VATSK_NAZWA"] = kw["WRK_VATSK_NAZWA"];
                        newKwota["STP_VATSK_ILOSC"] = kw["WRK_VATSK_ILOSC"];

                        ds.STP_VATS_KWOTY.Rows.Add(newKwota);
                    }
                    if (manager.UpdateDataSet(ds))
                        f.ShowDxInfoDialog("Nowa definicja dodana pomyślnie.");
                    else
                    {
                        manager.LastException.Log();
                        f.ShowDxErrorDialog("Błąd dodawania definicji.");
                    }
                    f.Dispose();
                }
            }
        }

        public static bool AddVatsToKpir(WrkVatsDataSet ds)
        {
            bool result = true;
            WrkKpirDataSet kpirDs = new WrkKpirDataSet();
            DataRow[] rows = ds.WRK_VATS.Select("DODAJ_DO_KPIR = 1");
            DataRow newKpirRow;
            DataRow[] kwoty;
            DataRow newKpirKwota;

            foreach (DataRow r in rows)
            {
                newKpirRow = kpirDs.WRK_KPIR.NewRow();
                newKpirRow["WRK_KPIR_DATA"] = r["WRK_VATS_DATA_WYSTAWIENIA"];
                newKpirRow["WRK_KPIR_NUMER_DOWODU_KSIEGOWEGO"] = r["WRK_VATS_NUMER"];
                newKpirRow["WRK_KPIR_KONTRACHENT"] = r["WRK_VATS_NABYWCA"];
                newKpirRow["WRK_KPIR_OPIS"] = r["WRK_VATS_OPIS"];
                newKpirRow["WRK_KPIR_UWAGI"] = r["WRK_VATS_UWAGI"];
                newKpirRow["WRK_KPIR_ROK"] = r["WRK_VATS_ROK"];
                kpirDs.WRK_KPIR.Rows.Add(newKpirRow);

                kwoty = r.GetChildRows("FK_WRK_VATS_WRK_VATS_KWOTY");
                if (kwoty != null && kwoty.Length > 0)
                {
                    foreach (DataRow kr in kwoty)
                    {
                        newKpirKwota = kpirDs.WRK_KPIR_KWOTY.NewRow();
                        newKpirKwota["WRK_KPIRK_FAKTURA"] = newKpirRow["WRK_KPIR_ID"];
                        newKpirKwota["WRK_KPIRK_KWOTA_NETTO"] = kr["WRK_VATSK_KWOTA_NETTO"].AsDecimal() * kr["WRK_VATSK_ILOSC"].AsDecimal();
                        newKpirKwota["WRK_KPIRK_TYP"] = kr["WRK_VATSK_TYP_KPIR"];
                        kpirDs.WRK_KPIR_KWOTY.Rows.Add(newKpirKwota);
                    }
                }
            }
            manager.AddTableDef(kpirDs.WRK_KPIR);
            manager.AddTableDef(kpirDs.WRK_KPIR_KWOTY);
            result = manager.UpdateDataSet(kpirDs);
            if (!result)
                manager.LastException.Log();
            return result;
        }
        #endregion

        public static void AddVatzFromDef(WrkVatzDataSet ds, int id, DataRow row)
        {
            if (row != null)
            {
                DataRow[] child = row.GetChildRows(row.Table.ChildRelations[0]);
                foreach (DataRow r in child)
                    r.Delete();
            }
            else
            {
                row = ds.WRK_VATZ.NewRow();
                ds.WRK_VATZ.Rows.Add(row);
            }

            DataTable dt = new DataTable("STP_VATZ");
            manager.FillTable(dt, "SELECT * FROM STP_VATZ WHERE STP_VATZ_ID = @ID", new NamedObject("@ID", id));
            if (dt.Rows.Count == 1)
            {
                DataRow setupFaktura = dt.Rows[0];
                row["WRK_VATZ_SPRZEDAWCA"] = setupFaktura["STP_VATZ_SPRZEDAWCA"];
                row["WRK_VATZ_UWAGI"] = setupFaktura["STP_VATZ_UWAGI"];
                row["WRK_VATZ_OPIS"] = setupFaktura["STP_VATZ_OPIS"];
                row["DODAJ_DO_KPIR"] = setupFaktura["STP_VATZ_DODAJ_DO_KPIR"];
                row["DODAJ_DO_WYDATKOW"] = setupFaktura["STP_VATZ_DODAJ_DO_WYDATKOW"];
                dt = new DataTable("STP_VATZ_KWOTY");
                manager.FillTable(dt, "SELECT * FROM STP_VATZ_KWOTY WHERE STP_VATZK_FAKTURA = @ID", new NamedObject("@ID", id));
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow setupKwotaRow in dt.Rows)
                    {
                        DataRow newKwota = ds.WRK_VATZ_KWOTY.NewRow();
                        newKwota["WRK_VATZK_FAKTURA"] = row["WRK_VATZ_ID"];
                        newKwota["WRK_VATZK_KWOTA_NETTO"] = setupKwotaRow["STP_VATZK_KWOTA_NETTO"];
                        newKwota["WRK_VATZK_TYP"] = setupKwotaRow["STP_VATZK_TYP"];
                        newKwota["WRK_VATZK_TYP_KPIR"] = setupKwotaRow["STP_VATZK_TYP_KPIR"];
                        newKwota["WRK_VATZK_STAWKA_VAT"] = setupKwotaRow["STP_VATZK_STAWKA_VAT"];
                        ds.WRK_VATZ_KWOTY.Rows.Add(newKwota);
                    }
                }
            }
        }

        public static void SaveVatzAsDef(DataRow row)
        {
            if (row.CanRead())
            {
                InputForm f = new InputForm();
                string name = f.ShowInputDialog("Nazwa", "Nowa definicja Zakupów VAT");
                if (name.IsNotNull())
                {
                    StpVatzDataSet ds = new StpVatzDataSet();
                    manager.AddTableDef(ds.STP_VATZ);
                    manager.AddTableDef(ds.STP_VATZ_KWOTY);
                    DataRow newSetupFaktura = ds.STP_VATZ.NewRow();
                    newSetupFaktura["STP_VATZ_NAZWA"] = name;
                    newSetupFaktura["STP_VATZ_SPRZEDAWCA"] = row["WRK_VATZ_SPRZEDAWCA"];
                    newSetupFaktura["STP_VATZ_UWAGI"] = row["WRK_VATZ_UWAGI"];
                    newSetupFaktura["STP_VATZ_OPIS"] = row["WRK_VATZ_OPIS"];
                    newSetupFaktura["STP_VATZ_DODAJ_DO_KPIR"] = row["DODAJ_DO_KPIR"].AsBool();
                    newSetupFaktura["STP_VATZ_DODAJ_DO_WYDATKOW"] = row["DODAJ_DO_WYDATKOW"].AsBool(); ;
                    ds.STP_VATZ.Rows.Add(newSetupFaktura);

                    DataRow[] child = row.GetChildRows(row.Table.ChildRelations[0]);
                    DataRow newKwota = null;
                    foreach (DataRow kw in child)
                    {
                        newKwota = ds.STP_VATZ_KWOTY.NewRow();
                        newKwota["STP_VATZK_FAKTURA"] = newSetupFaktura["STP_VATZ_ID"];
                        newKwota["STP_VATZK_KWOTA_NETTO"] = kw["WRK_VATZK_KWOTA_NETTO"];
                        newKwota["STP_VATZK_TYP"] = kw["WRK_VATZK_TYP"];
                        newKwota["STP_VATZK_TYP_KPIR"] = kw["WRK_VATZK_TYP_KPIR"];
                        newKwota["STP_VATZK_STAWKA_VAT"] = kw["WRK_VATZK_STAWKA_VAT"];

                        ds.STP_VATZ_KWOTY.Rows.Add(newKwota);
                    }
                    if (manager.UpdateDataSet(ds))
                        f.ShowDxInfoDialog("Nowa definicja dodana pomyślnie.");
                    else
                    {
                        manager.LastException.Log();
                        f.ShowDxErrorDialog("Błąd dodawania definicji.");
                    }
                    f.Dispose();
                }
            }
        }

        public static bool AddVatzToKpir(WrkVatzDataSet ds)
        {
            bool result = true;
            WrkKpirDataSet kpirDs = new WrkKpirDataSet();
            DataRow[] rows = ds.WRK_VATZ.Select("DODAJ_DO_KPIR = 1");
            DataRow newKpirRow;
            DataRow[] kwoty;
            DataRow newKpirKwota;

            foreach (DataRow r in rows)
            {
                newKpirRow = kpirDs.WRK_KPIR.NewRow();
                newKpirRow["WRK_KPIR_DATA"] = r["WRK_VATZ_DATA_WYSTAWIENIA"];
                newKpirRow["WRK_KPIR_NUMER_DOWODU_KSIEGOWEGO"] = r["WRK_VATZ_NUMER"];
                newKpirRow["WRK_KPIR_KONTRACHENT"] = r["WRK_VATZ_SPRZEDAWCA"];
                newKpirRow["WRK_KPIR_OPIS"] = r["WRK_VATZ_OPIS"];
                newKpirRow["WRK_KPIR_UWAGI"] = r["WRK_VATZ_UWAGI"];
                newKpirRow["WRK_KPIR_ROK"] = r["WRK_VATZ_ROK"];
                kpirDs.WRK_KPIR.Rows.Add(newKpirRow);

                kwoty = r.GetChildRows("FK_WRK_VATZ_WRK_VATZ_KWOTY");
                if (kwoty != null && kwoty.Length > 0)
                {
                    foreach (DataRow kr in kwoty)
                    {
                        newKpirKwota = kpirDs.WRK_KPIR_KWOTY.NewRow();
                        newKpirKwota["WRK_KPIRK_FAKTURA"] = newKpirRow["WRK_KPIR_ID"];
                        newKpirKwota["WRK_KPIRK_KWOTA_NETTO"] = kr["WRK_VATZK_KWOTA_NETTO"].AsDecimal();
                        newKpirKwota["WRK_KPIRK_TYP"] = kr["WRK_VATZK_TYP_KPIR"];
                        kpirDs.WRK_KPIR_KWOTY.Rows.Add(newKpirKwota);
                    }
                }
            }
            manager.AddTableDef(kpirDs.WRK_KPIR);
            manager.AddTableDef(kpirDs.WRK_KPIR_KWOTY);
            result = manager.UpdateDataSet(kpirDs);
            if (!result)
                manager.LastException.Log();
            return result;
        }
    }
}
